#pragma once

#include <string>
#include <sstream>
#include "../SQLExprImpl.h"
#include "../statement/SQLTableSource.h"

class SQLASTVisitor;

class SQLAllColumnExpr : virtual public SQLExprImpl
{
public:
  static string_ptr class_;
  SQLTableSource_ptr resolvedTableSource;
  SQLExpr_ptr owner;
  SQLExpr_list_ptr except;

  SQLAllColumnExpr();
  virtual ~SQLAllColumnExpr();
  SHAREDOBJECT(SQLAllColumnExpr);

  void output(std::stringstream *buf);
  SQLTableSource_ptr getResolvedTableSource()
  {
    return resolvedTableSource;
  };

  // int hashCode();
  // BOOL_ptr equals(Object o);

  bool containsAttribute(string_ptr name){};
  void addBeforeComment(string_list_ptr comments){};
  string_list_ptr getAfterCommentsDirect(){};
  string_list_ptr getBeforeCommentsDirect(){};
  void addAfterComment(string_ptr comment){};
  void addAfterComment(string_list_ptr comments){};
  bool hasBeforeComment(){};
  bool hasAfterComment(){};
  void setResolvedTableSource(SQLTableSource_ptr resolvedTableSource);
  SQLExpr_ptr getOwner();
  void setOwner(SQLExpr_ptr x);
  SQLExpr_list_ptr getExcept();
  void setExcept(SQLExpr_list_ptr except);

protected:
  void accept0(SQLASTVisitor_ptr visitor);
};
